Urban Forestry and Bird Populations¶

Authored by: Uvini Wijesinghe
Duration: 10 Weeks
Level: Intermediate
Pre-requisite Skills: Python

Scenario


In the context of urban ecology, we are investigating the relationship between tree characteristics and bird populations within the City of Melbourne. Specifically, our analysis will focus on determining whether areas with higher tree density, greater tree diversity, or the presence of particular tree species correlate with increased bird species richness and abundance. The premise is that diverse tree populations may support a wider variety of bird species, thereby indicating a healthier and more vibrant urban environment. This scenario will help us understand the ecological benefits of urban forestry and guide strategies for enhancing biodiversity in city landscapes.

User Story

Title: Understanding the Relationship Between Tree Characteristics and Bird Populations in Urban Areas

As a: City Ecologist

I want to: Analyze the relationship between tree density, tree diversity, and specific types of trees with bird species richness and abundance in the City of Melbourne.

So that: I can determine if diverse tree populations support a more diverse bird species, indicating a healthier urban environment, and guide strategies for enhancing biodiversity in city landscapes.

Acceptance Criteria:

  • Collect and integrate datasets on bird survey results and urban forest characteristics.
  • Analyze the data to identify areas with varying tree density, diversity, and specific tree species.
  • Correlate these tree characteristics with measures of bird species richness and abundance.
  • Generate visualizations and reports that illustrate the findings.
  • Provide actionable insights and recommendations for urban forestry management to promote biodiversity.

Introduction


There are two datasets being used in this analysis. These datasets will include below:

  • Birds Dataset: This dataset contains detailed survey data for bird species observed across various river and wetland locations in the City of Melbourne. Conducted by Ecology Australia, these surveys were carried out during daylight hours on multiple dates in February and March 2018, focusing on bird species richness at different sites, including the main site at Dynon Road, West Melbourne, and several reference sites with similar habitat characteristics.

  • Trees Dataset: The City of Melbourne's tree dataset provides comprehensive information on over 70,000 trees, detailing their location, species, and lifespan across different precincts. This dataset supports the city's Urban Forest Strategy and can be explored through an interactive tree map, offering insights into the diversity and life expectancy of Melbourne's urban forest.

In [ ]:
# Import packages
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from numpy import nan
import plotly.express as px

import requests
from io import StringIO

import folium
from geopy.distance import geodesic
from scipy.stats import chi2_contingency

API Call¶

In [ ]:
#Function to collect data
def collect_data(dataset_id):
    base_url = 'https://data.melbourne.vic.gov.au/api/explore/v2.1/catalog/datasets/'
    #apikey = api_key #use if use datasets API_key permissions
    dataset_id = dataset_id
    format = 'csv'

    url = f'{base_url}{dataset_id}/exports/{format}'
    params = {
        'select': '*',
        'limit': -1,  # all records
        'lang': 'en',
        'timezone': 'UTC',
        #'api_key': apikey  #use if use datasets API_key permissions
    }

    # GET request
    response = requests.get(url, params=params)

    if response.status_code == 200:
        # StringIO to read the CSV data
        url_content = response.content.decode('utf-8')
        dataset = pd.read_csv(StringIO(url_content), delimiter=';')
        return dataset
    else:
        print(f'Request failed with status code {response.status_code}')
In [ ]:
# Set dataset_id to query for the API call dataset name
dataset_1_id = 'bird-survey-results-for-areas-in-the-city-of-melbourne-february-and-march-2018'
dataset_2_id = 'trees-with-species-and-dimensions-urban-forest'
In [ ]:
# Save datasets
bird_data = collect_data(dataset_1_id)
tree_data = collect_data(dataset_2_id)

Clean Bird Dataset¶

In [ ]:
# Read the bird csv file
# bird_data = pd.read_csv("bird-survey-results-for-areas-in-the-city-of-melbourne-february-and-march-2018.csv")
bird_data.head(3)
Out[ ]:
sighting_date common_name scientific_name sighting_count victorian_biodiversity_atlas_code lat lon loc1_desc lat2 lon2 loc2_desc site_name location_2 location_1
0 2018-03-12 Australian Magpie Gymnorhina tibicen 2 10705 -37.8038 144.9118 Dynon Road Tidal Canal Wildlife Sanctuary Down... NaN NaN NaN Dynon Road Tidal Canal Wildlife Sanctuary NaN -37.8038, 144.9118
1 2018-02-28 Australian White Ibis Threskiornis molucca 141 10179 -37.8038 144.9118 Dynon Road Tidal Canal Wildlife Sanctuary Down... NaN NaN NaN Dynon Road Tidal Canal Wildlife Sanctuary NaN -37.8038, 144.9118
2 2018-03-12 Australian White Ibis Threskiornis molucca 83 10179 -37.8038 144.9118 Dynon Road Tidal Canal Wildlife Sanctuary Down... NaN NaN NaN Dynon Road Tidal Canal Wildlife Sanctuary NaN -37.8038, 144.9118
In [ ]:
# View info on bird dataset
bird_data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 498 entries, 0 to 497
Data columns (total 14 columns):
 #   Column                             Non-Null Count  Dtype  
---  ------                             --------------  -----  
 0   sighting_date                      498 non-null    object 
 1   common_name                        498 non-null    object 
 2   scientific_name                    498 non-null    object 
 3   sighting_count                     498 non-null    int64  
 4   victorian_biodiversity_atlas_code  498 non-null    int64  
 5   lat                                498 non-null    float64
 6   lon                                498 non-null    float64
 7   loc1_desc                          498 non-null    object 
 8   lat2                               248 non-null    float64
 9   lon2                               248 non-null    float64
 10  loc2_desc                          248 non-null    object 
 11  site_name                          498 non-null    object 
 12  location_2                         248 non-null    object 
 13  location_1                         498 non-null    object 
dtypes: float64(4), int64(2), object(8)
memory usage: 54.6+ KB
In [ ]:
# Delete columns with more than 50% of empty values
del bird_data['lat2']
del bird_data['lon2']
del bird_data['loc2_desc']
del bird_data['location_2']
del bird_data['location_1']
In [ ]:
# Convert the data type of the Date column into DateTime
bird_data['sighting_date'] = pd.to_datetime(bird_data['sighting_date'])
In [ ]:
# View cleaned data
bird_data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 498 entries, 0 to 497
Data columns (total 9 columns):
 #   Column                             Non-Null Count  Dtype         
---  ------                             --------------  -----         
 0   sighting_date                      498 non-null    datetime64[ns]
 1   common_name                        498 non-null    object        
 2   scientific_name                    498 non-null    object        
 3   sighting_count                     498 non-null    int64         
 4   victorian_biodiversity_atlas_code  498 non-null    int64         
 5   lat                                498 non-null    float64       
 6   lon                                498 non-null    float64       
 7   loc1_desc                          498 non-null    object        
 8   site_name                          498 non-null    object        
dtypes: datetime64[ns](1), float64(2), int64(2), object(4)
memory usage: 35.1+ KB
In [ ]:
# View cleaned data
bird_data.head(3)
Out[ ]:
sighting_date common_name scientific_name sighting_count victorian_biodiversity_atlas_code lat lon loc1_desc site_name
0 2018-03-12 Australian Magpie Gymnorhina tibicen 2 10705 -37.8038 144.9118 Dynon Road Tidal Canal Wildlife Sanctuary Down... Dynon Road Tidal Canal Wildlife Sanctuary
1 2018-02-28 Australian White Ibis Threskiornis molucca 141 10179 -37.8038 144.9118 Dynon Road Tidal Canal Wildlife Sanctuary Down... Dynon Road Tidal Canal Wildlife Sanctuary
2 2018-03-12 Australian White Ibis Threskiornis molucca 83 10179 -37.8038 144.9118 Dynon Road Tidal Canal Wildlife Sanctuary Down... Dynon Road Tidal Canal Wildlife Sanctuary

Clean Tree Dataset¶

In [ ]:
#read the tree csv file
# tree_data = pd.read_csv("trees-with-species-and-dimensions-urban-forest.csv")
tree_data.head(3)
Out[ ]:
com_id common_name scientific_name genus family diameter_breast_height year_planted date_planted age_description useful_life_expectency useful_life_expectency_value precinct located_in uploaddate coordinatelocation latitude longitude easting northing geolocation
0 1029241 London Plane Platanus x acerifolia Platanus Platanaceae 59.0 1997 1997-12-04 Mature 6-10 years (>50% canopy) 10.0 NaN Street 2021-01-10 -37.834844802361296, 144.97624052189326 -37.834845 144.976241 321912.33 5810579.39 -37.834844802361296, 144.97624052189326
1 1357481 Cyprus Plane Platanus orientalis Platanus Platanaceae 8.0 2008 2008-03-12 Juvenile 61+ years 80.0 NaN Park 2021-01-10 -37.82112379777012, 144.97204161951672 -37.821124 144.972042 321509.73 5812093.94 -37.82112379777012, 144.97204161951672
2 1022615 Spotted Gum Corymbia maculata Corymbia Myrtaceae 73.0 1997 1997-11-10 Mature 31-60 years 60.0 NaN Street 2021-01-10 -37.800407968829234, 144.9624661325885 -37.800408 144.962466 320616.72 5814374.35 -37.800407968829234, 144.9624661325885
In [ ]:
# View tree info
tree_data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 76928 entries, 0 to 76927
Data columns (total 20 columns):
 #   Column                        Non-Null Count  Dtype  
---  ------                        --------------  -----  
 0   com_id                        76928 non-null  int64  
 1   common_name                   76903 non-null  object 
 2   scientific_name               76927 non-null  object 
 3   genus                         76927 non-null  object 
 4   family                        76927 non-null  object 
 5   diameter_breast_height        24986 non-null  float64
 6   year_planted                  76928 non-null  int64  
 7   date_planted                  76928 non-null  object 
 8   age_description               24969 non-null  object 
 9   useful_life_expectency        24969 non-null  object 
 10  useful_life_expectency_value  24969 non-null  float64
 11  precinct                      0 non-null      float64
 12  located_in                    76926 non-null  object 
 13  uploaddate                    76928 non-null  object 
 14  coordinatelocation            76928 non-null  object 
 15  latitude                      76928 non-null  float64
 16  longitude                     76928 non-null  float64
 17  easting                       76928 non-null  float64
 18  northing                      76928 non-null  float64
 19  geolocation                   76928 non-null  object 
dtypes: float64(7), int64(2), object(11)
memory usage: 11.7+ MB
In [ ]:
# Delete columns with more than 50% of empty values
del tree_data['diameter_breast_height']
del tree_data['age_description']
del tree_data['useful_life_expectency']
del tree_data['useful_life_expectency_value']
del tree_data['precinct']
In [ ]:
# Convert the data type of Date columns into DateTime
tree_data['date_planted'] = pd.to_datetime(tree_data['date_planted'])
tree_data['uploaddate'] = pd.to_datetime(tree_data['uploaddate'])
In [ ]:
# View cleaned data
tree_data.head(3)
Out[ ]:
com_id common_name scientific_name genus family year_planted date_planted located_in uploaddate coordinatelocation latitude longitude easting northing geolocation
0 1029241 London Plane Platanus x acerifolia Platanus Platanaceae 1997 1997-12-04 Street 2021-01-10 -37.834844802361296, 144.97624052189326 -37.834845 144.976241 321912.33 5810579.39 -37.834844802361296, 144.97624052189326
1 1357481 Cyprus Plane Platanus orientalis Platanus Platanaceae 2008 2008-03-12 Park 2021-01-10 -37.82112379777012, 144.97204161951672 -37.821124 144.972042 321509.73 5812093.94 -37.82112379777012, 144.97204161951672
2 1022615 Spotted Gum Corymbia maculata Corymbia Myrtaceae 1997 1997-11-10 Street 2021-01-10 -37.800407968829234, 144.9624661325885 -37.800408 144.962466 320616.72 5814374.35 -37.800407968829234, 144.9624661325885

EDA - Birds¶

10 Most Common Birds¶

This section focuses on identifying the top 10 most commonly sighted bird species based on the total number of sightings. The data is grouped by bird species, and the total sightings for each species are calculated. Then, a bar chart is created to visually display these top 10 bird species, showing the total number of times they were seen.

In [ ]:
# Group by Common Name and sum the Sighting Count
top_birds = bird_data.groupby('common_name')['sighting_count'].sum().nlargest(10).reset_index()

# Plot the interactive bar chart
fig = px.bar(top_birds,
             x='common_name',
             y='sighting_count',
             title='Top 10 Most Common Birds',
             labels={'common_name': 'Bird Species', 'sighting_count': 'Sighting Count'},
             hover_data={'sighting_count': True, 'common_name': True},
            color_discrete_sequence=['#1f77b4'])

# Show the plot
fig.show()

Most Common Bird Seeing Sights¶

This section highlights the top 10 locations where birds were most frequently spotted. The data is grouped by site names, and the total number of bird sightings for each location is calculated. A bar chart is then created to visually represent these top 10 locations, showing how many bird sightings occurred at each site.

In [ ]:
# Group by site_name and sum the Sighting Count
top_sites = bird_data.groupby('site_name')['sighting_count'].sum().nlargest(10).reset_index()

# Plot the interactive bar chart
fig = px.bar(top_sites,
             x='site_name',
             y='sighting_count',
             title='Top 10 Most Common Sites',
             labels={'site_name': 'Site Names', 'sighting_count': 'Sighting Count'},
             hover_data={'sighting_count': True, 'site_name': True},
            color_discrete_sequence=['#1f77b4'])

# Show the plot
fig.show()

Sighting of Bird Species Over Time¶

This section focuses on analyzing how sightings of the top 10 most common bird species change over time. First, the top 10 bird species are identified, and the dataset is filtered to include only these species. Then, the data is grouped by date and bird species to track the total number of sightings for each species over time. A line chart is created to visualize these trends, with each bird species represented by a different line.

In [ ]:
# Identify the top 10 most common birds
top_birds = bird_data.groupby('common_name')['sighting_count'].sum().nlargest(10).index

# Filter the dataset to include only the top 10 bird species
filtered_df = bird_data[bird_data['common_name'].isin(top_birds)]

# Aggregate data by date and common name
time_series_data = filtered_df.groupby(['sighting_date', 'common_name'])['sighting_count'].sum().reset_index()

# Plot the interactive time series data
fig = px.line(time_series_data,
              x='sighting_date',
              y='sighting_count',
              color='common_name',
              title='Time Series of Top 10 Bird Species Sightings',
              labels={'sighting_date': 'Date', 'sighting_count': 'Sighting Count', 'common_name': 'Bird Species'},
              hover_data={'sighting_count': True, 'sighting_date': True, 'common_name': True})

fig.update_layout(legend_title_text='Bird Species')

# Show the plot
fig.show()

EDA - Tree¶

10 Most Common Trees¶

This section focuses on visualizing the most common tree species in the dataset. It starts by counting the number of trees for each species and identifies the top 10 most frequently occurring tree species. A bar chart is then created to display the number of trees for each of these species.

In [ ]:
import pandas as pd
import plotly.express as px

# Count the number of trees for each Common Name
tree_counts = tree_data['common_name'].value_counts().nlargest(10).reset_index()
tree_counts.columns = ['common_name', 'Count']

# Plot the bar chart
fig = px.bar(tree_counts,
             x='common_name',
             y='Count',
             title='Number of Trees by Common Name',
             labels={'common_name': 'Tree Species', 'Count': 'Number of Trees'},
            color_discrete_sequence=['#1f77b4'])

# Show the plot
fig.show()

Tree Planting Trends Over Years¶

This section examines the trend of tree plantings over the years. First, it extracts the year from the "Date Planted" column in the dataset to determine when each tree was planted. Then, it groups the data by year and counts how many trees were planted each year. A line graph is created to visualize the number of trees planted annually, showing the changes over time.

In [ ]:
# Extract the year from the Date Planted column
tree_data['year_planted'] = pd.to_datetime(tree_data['date_planted']).dt.year

# Group by Year Planted and count the number of trees
yearly_plantings = tree_data.groupby('year_planted').size().reset_index(name='Count')

# Plot the line graph
fig = px.line(yearly_plantings,
              x='year_planted',
              y='Count',
              title='Number of Trees Planted Each Year',
              labels={'year_planted': 'Year', 'Count': 'Number of Trees'},
              markers=True,
             color_discrete_sequence=['#1f77b4'])

fig.show()

Tree Age Distribution¶

This section focuses on analyzing the age distribution of trees in the dataset. It calculates the age of each tree by subtracting the year it was planted from the current year. A histogram is then created to show how the ages of the trees are distributed, with the x-axis representing the age in years and the y-axis showing the frequency of trees in each age range.

In [ ]:
# Calculate tree age
tree_data['age'] = pd.Timestamp.now().year - tree_data['year_planted']

# Plot the histogram
fig = px.histogram(tree_data,
                   x='age',
                   title='Distribution of Tree Ages',
                   labels={'age': 'Age (Years)'},
                   hover_data={'age': True},
                  color_discrete_sequence=['#1f77b4'])

fig.show()

Tree Located Places¶

This section examines where trees are located, distinguishing between streets and parks. It counts the number of trees found in each location type and creates a horizontal bar chart to display these counts.

In [ ]:
# Count the number of trees for each Common Name
tree_counts = tree_data['located_in'].value_counts().reset_index()
tree_counts.columns = ['located_in', 'Count']

# Plot the bar chart
fig = px.bar(tree_counts,
             x='Count',
             y='located_in',
             title='Number of Trees Located in Streets and Parks',
             labels={'located_in': 'Tree Location', 'Count': 'Number of Trees'},
            orientation='h',
            color_discrete_sequence=['#1f77b4'])

# Show the plot
fig.show()

Trees Map¶

This section focuses on mapping the locations of the top 5 most common tree species. It first identifies these species and filters the dataset to include only those trees. A base map is created centered on the average location of these trees. Each of the top 5 tree species is represented on the map with markers in different colors. Each marker shows the location of a tree and includes a tooltip with the tree species' name. This visualization helps to easily see where the most common trees are situated across the area.

In [ ]:
# Count the occurrences of each tree species
common_trees = tree_data['common_name'].value_counts()

# Determine the most common trees (top 5)
most_common_trees = common_trees.head(5).index.tolist()

# Filter the dataset to include only these most common tree species
filtered_df = tree_data[tree_data['common_name'].isin(most_common_trees)]
In [ ]:
# Create a base map
map_center = [filtered_df['latitude'].mean(), filtered_df['longitude'].mean()]
m = folium.Map(location=map_center, zoom_start=12)

# Create a marker for each tree species with a tooltip with different colours for different trees
colors = [
    'red', 'blue', 'green', 'purple', 'orange'
]

# Add the trees to the map
for i, tree in enumerate(most_common_trees):
    tree_data_x = filtered_df[filtered_df['common_name'] == tree]
    for _, row in tree_data_x.iterrows():
        folium.CircleMarker(
            location=[row['latitude'], row['longitude']],
            radius=5,
            color=colors[i],
            fill=True,
            fill_color=colors[i],
            fill_opacity=0.6,
            tooltip=folium.Tooltip(f"Tree: {row['common_name']}")
        ).add_to(m)

# Display the map
m
Out[ ]:
Make this Notebook Trusted to load map: File -> Trust Notebook

Birds Map¶

This section visualizes bird sightings across different locations on a map. It starts by summarizing the number of bird sightings for each species at each geographical point. Then, it combines all the bird species' sightings into a single record per location. And a map is created, centered on the average location of all bird sightings. Markers are added to the map for each location, with popups displaying the bird species and their sighting counts at that spot.

In [ ]:
# Group the dataset by geo location and bird species, and sum the sighting counts
grouped_df = bird_data.groupby(['lat', 'lon', 'common_name'])['sighting_count'].sum().reset_index()

# Group again by location to combine all bird species into one record per location
location_grouped_df = grouped_df.groupby(['lat', 'lon']).apply(
    lambda x: '<br>'.join(f"{row['common_name']}: {row['sighting_count']}" for _, row in x.iterrows())
).reset_index()

location_grouped_df.columns = ['lat', 'lon', 'details']

# Create a base map
map_center = [location_grouped_df['lat'].mean(), location_grouped_df['lon'].mean()]
m = folium.Map(location=map_center, zoom_start=12)

# Add a marker for each location with a popup showing the bird species and sighting counts
for _, row in location_grouped_df.iterrows():
    folium.Marker(
        location=[row['lat'], row['lon']],
        popup=folium.Popup(f"Birds Spotted:<br>{row['details']}", max_width=300),
        icon=folium.Icon(color='blue', icon='info-sign')
    ).add_to(m)

# Display the map
m
Out[ ]:
Make this Notebook Trusted to load map: File -> Trust Notebook

Trees in Bird Spotted Areas¶

This section identifies trees that are close to bird sighting locations. It starts by extracting unique bird locations. A function is defined to check if a tree is within a specified distance (0.5 km) from any bird location. This function is then applied to each tree in the dataset to determine if it is near a bird sighting location. Trees that are close to these bird locations are filtered out, and the resulting dataset contains only those trees. This will helps to focus on trees that are in proximity to where birds have been spotted.

In [ ]:
# Create a copy of tree data
trees_df = tree_data.copy()


# Extract unique bird locations
bird_locations = bird_data[['lat', 'lon']].drop_duplicates()

# Define a function to calculate the distance between two geo-coordinates
def is_within_radius(tree_location, bird_locations, radius=0.5):
    """
    Check if the tree is within a specified radius (in km) of any bird location.
    """
    for _, bird_loc in bird_locations.iterrows():
        distance = geodesic(tree_location, (bird_loc['lat'], bird_loc['lon'])).kilometers
        if distance <= radius:
            return True
    return False

# Apply the function to each tree to determine if it is within the specified radius
trees_df['Is_Near_Bird_Location'] = trees_df.apply(
    lambda row: is_within_radius((row['latitude'], row['longitude']), bird_locations, radius=0.5),
    axis=1
)

# Filter trees to keep only those that are near bird locations
trees_near_birds = trees_df[trees_df['Is_Near_Bird_Location']]

# Drop the helper column
trees_near_birds = trees_near_birds.drop(columns=['Is_Near_Bird_Location'])
In [ ]:
trees_near_birds.head()
Out[ ]:
com_id common_name scientific_name genus family year_planted date_planted located_in uploaddate coordinatelocation latitude longitude easting northing geolocation age
21 1580661 Firewheel Tree Stenocarpus sinuatus Stenocarpus Proteaceae 2015 2015-04-22 Park 2021-01-10 -37.8034096601597, 144.91255996768032 -37.803410 144.912560 316229.97 5813944.27 -37.8034096601597, 144.91255996768032 9
35 1740152 Boobialla Myoporum insulare Myoporum Scrophulariaceae 2018 2018-06-13 Street 2021-01-10 -37.80226626339296, 144.92063376246185 -37.802266 144.920634 316938.01 5814087.00 -37.80226626339296, 144.92063376246185 6
38 1518946 River Sheoak Casuarina cunninghamiana Casuarina Casuarinaceae 2012 2012-11-18 Park 2021-01-10 -37.77942003120296, 144.95200003606246 -37.779420 144.952000 319644.16 5816683.15 -37.77942003120296, 144.95200003606246 12
74 1786084 Mutton-Wood Myrsine howittiana Myrsine Primulaceae 2020 2020-07-29 Park 2021-01-10 -37.8025838094295, 144.92239880084955 -37.802584 144.922399 317094.20 5814055.22 -37.8025838094295, 144.92239880084955 4
89 1523829 Yellow Box Eucalyptus melliodora Eucalyptus Myrtaceae 2013 2013-01-22 Park 2021-01-10 -37.781693701549536, 144.94421465830052 -37.781694 144.944215 318964.02 5816415.80 -37.781693701549536, 144.94421465830052 11

Map of Common Trees Surrounding Bird Spotted Locations¶

This section creates a detailed map to visualize the relationship between bird sightings and nearby common tree species. It starts by filtering the tree data to include only the top 10 most common tree species found near bird sighting locations. A base map is created with the center on the average location of all bird sightings. Each bird sighting location is marked on the map with a red marker and a 0.5 km radius circle to show the area of interest around it. Within these circles, the top 10 tree species are plotted using colored markers, each representing a different species. This visualization helps to understand where these common trees are located in relation to bird sightings.

In [ ]:
# Load the trees and birds datasets
trees_near_birds_df = trees_near_birds.copy()
birds_df = bird_data.copy()
In [ ]:
# Filter to the top 10 most common trees
top_5_trees = trees_near_birds_df['common_name'].value_counts().head(10).index.tolist()
filtered_trees_df = trees_near_birds_df[trees_near_birds_df['common_name'].isin(top_5_trees)]
In [ ]:
# Initialize the base map centered around the mean location of the bird sightings
map_center = [birds_df['lat'].mean(), birds_df['lon'].mean()]
m = folium.Map(location=map_center, zoom_start=12)

# Add bird sighting location markers with 0.5 km radius circle
for _, bird in birds_df.iterrows():
    bird_location = [bird['lat'], bird['lon']]

    # Add bird location marker
    folium.Marker(
        location=bird_location,
        icon=folium.Icon(color='red', icon='info-sign'),
        popup=folium.Popup(f"Bird: {bird['common_name']}<br>Sighting Count: {bird['sighting_count']}", max_width=300),
    ).add_to(m)

    # Add a circle representing the 0.5 km radius around the bird location
    folium.Circle(
        radius=500,
        location=bird_location,
        color='darkblue',
        fill=False,
        fill_opacity=0.1,
    ).add_to(m)

# Define the color palette
colors = ['red', 'blue', 'green', 'purple', 'orange',
          'black', 'lightblue', 'gray', 'brown', 'yellow']

# Plot CircleMarkers for the top 10 trees inside the radius circles
for idx, (common_name, group) in enumerate(filtered_trees_df.groupby('common_name')):
    color = colors[idx % len(colors)]
    for _, tree in group.iterrows():
        tree_location = [tree['latitude'], tree['longitude']]

        # Add CircleMarker for each tree
        folium.CircleMarker(
            location=tree_location,
            radius=5,
            color=color,
            fill=True,
            fill_color=color,
            fill_opacity=0.7,
            popup=folium.Popup(f"Tree: {tree['common_name']}<br>Scientific Name: {tree['scientific_name']}", max_width=300),
        ).add_to(m)

# Display the map
m
Out[ ]:
Make this Notebook Trusted to load map: File -> Trust Notebook

Most Common Birds and Trees Surrounding Each Bird Spotted Locations¶

This section analyzes the relationship between bird sightings and the surrounding trees within a 0.5 km radius. For each bird sighting location, the code identifies the trees and other bird species found nearby. It checks if there are any trees within a 0.5 km radius of each bird location and compiles a list of the top 5 most common tree species found in that area. Similarly, it identifies other birds spotted within the same radius and lists the top 5 bird species.

In [ ]:
# Load the filtered trees and birds datasets
trees_near_birds_df = trees_near_birds.copy()
birds_df = bird_data.copy()

# Initialize a list to store the results
radius_results = []

# Iterate over each bird sighting location
for _, bird in birds_df.iterrows():
    bird_location = (bird['lat'], bird['lon'])

    # Filter trees within the 0.5 km radius
    trees_within_radius = trees_near_birds_df[
        trees_near_birds_df.apply(
            lambda tree: geodesic(bird_location, (tree['latitude'], tree['longitude'])).km <= 0.5,
            axis=1
        )
    ]

    # Get the top 5 most common trees within the radius
    if not trees_within_radius.empty:
        top_5_trees = trees_within_radius['common_name'].value_counts().nlargest(10).index.tolist()
    else:
        top_5_trees = ["No trees within 0.5km radius"]

    # Filter birds within the 0.5 km radius
    birds_within_radius = birds_df[
        birds_df.apply(
            lambda b: geodesic(bird_location, (b['lat'], b['lon'])).km <= 0.5,
            axis=1
        )
    ]

    # Get the top 5 most common birds within the radius
    if not birds_within_radius.empty:
        top_5_birds = birds_within_radius['common_name'].value_counts().nlargest(10).index.tolist()
    else:
        top_5_birds = ["No other birds within 0.5km radius"]

    # Store the results
    radius_results.append({
        'bird_location': bird_location,
        'top_5_trees': top_5_trees,
        'top_5_birds': top_5_birds
    })

# Convert the results to a DataFrame
radius_results_df = pd.DataFrame(radius_results)
In [ ]:
radius_results_df
Out[ ]:
bird_location top_5_trees top_5_birds
0 (-37.8038, 144.9118) [Drooping sheoak, River red gum, Sweet Bursari... [Red Wattlebird, Magpie-lark, Spotted Turtle-D...
1 (-37.8038, 144.9118) [Drooping sheoak, River red gum, Sweet Bursari... [Red Wattlebird, Magpie-lark, Spotted Turtle-D...
2 (-37.8038, 144.9118) [Drooping sheoak, River red gum, Sweet Bursari... [Red Wattlebird, Magpie-lark, Spotted Turtle-D...
3 (-37.8038, 144.9118) [Drooping sheoak, River red gum, Sweet Bursari... [Red Wattlebird, Magpie-lark, Spotted Turtle-D...
4 (-37.8038, 144.9118) [Drooping sheoak, River red gum, Sweet Bursari... [Red Wattlebird, Magpie-lark, Spotted Turtle-D...
... ... ... ...
493 (-37.8138, 144.8727) [No trees within 0.5km radius] [White-faced Heron, Pacific Black Duck, Common...
494 (-37.8138, 144.8727) [No trees within 0.5km radius] [White-faced Heron, Pacific Black Duck, Common...
495 (-37.8138, 144.8727) [No trees within 0.5km radius] [White-faced Heron, Pacific Black Duck, Common...
496 (-37.8138, 144.8727) [No trees within 0.5km radius] [White-faced Heron, Pacific Black Duck, Common...
497 (-37.8138, 144.8727) [No trees within 0.5km radius] [White-faced Heron, Pacific Black Duck, Common...

498 rows × 3 columns

Relationship Between Trees and Birds¶

This section explores how different tree species and bird species are related by visualizing their co-occurrence. First, the data is expanded to list each bird and tree pairing for every bird sighting location. This expanded dataset is then used to count how often each bird species is seen around each tree species. The results are displayed in a heatmap, which shows the frequency of each bird species being observed around different tree species. This visualization helps to understand which bird species are commonly found around particular types of trees.

In [ ]:
df_exploded = radius_results_df.explode('top_5_trees').explode('top_5_birds').reset_index(drop=True)
df_exploded.head()
Out[ ]:
bird_location top_5_trees top_5_birds
0 (-37.8038, 144.9118) Drooping sheoak Red Wattlebird
1 (-37.8038, 144.9118) Drooping sheoak Magpie-lark
2 (-37.8038, 144.9118) Drooping sheoak Spotted Turtle-Dove
3 (-37.8038, 144.9118) Drooping sheoak Rock Dove
4 (-37.8038, 144.9118) Drooping sheoak Willie Wagtail
In [ ]:
# Copy df_exploded dataset
df = df_exploded.copy()

# Group by bird and tree to count occurrences
tree_bird_relationship = df.groupby(['top_5_trees', 'top_5_birds']).size().unstack(fill_value=0)

# Plot a heatmap to visualize the relationship
plt.figure(figsize=(10, 6))
sns.heatmap(tree_bird_relationship, annot=True, cmap='YlGnBu', fmt='d')
plt.title('Birds Seen Around Trees')
plt.ylabel('Trees')
plt.xlabel('Birds')
plt.show()

Conclusion¶

Based on the heatmap "Birds Seen Around Trees," a few observations can be made:

Tree and Bird Associations:

Some trees, like the River Red Gum, Spotted Gum, Black Wattle and Lightwood Wattle, show a high number of associations with multiple bird species. For instance, River red gum is associated with many species like the Australian Magpie, Magpie Lark, Willie Wagtail and others, which have high sighting counts. Trees like the Black Wattle, Drooping Sheoak, and Sweet Bursaria are also frequently associated with several bird species.

Popular Birds:

Some bird species like the Magpie Lark, Musk Lorikeet, Rainbow Lorikeet, and Red Wattlebird have higher frequencies of sightings across multiple tree species, suggesting they are common across different habitats. Species like Magpie Lark, Musk Lorikeet, Rainbow Lorikeet, Red Wattlebird, Rock Dove, Spotted Turtle Dove and Willie Wagtail show high associations with specific trees, suggesting a preference for certain types of trees.

Tree Influence on Bird Diversity:

Trees like Lightwood Wattle and River Red Gum seem to support a greater diversity of bird species. These trees have high counts across many species, possibly indicating that trees of these types promote a richer bird biodiversity.

Sighting Hotspots:

Certain combinations, such as River Red Gum and Spotted Gum with Magpie Lark stand out due to high sighting numbers. These might represent critical hotspots where bird sightings are concentrated, suggesting the ecological importance of these tree types.

Less Preferred Trees:

Trees like Golden Wattle, Red Box, Wilga and Yello Box show fewer associations with bird species, indicating they may not support as diverse or dense a population of birds compared to other trees.

In conclusion, trees like River Red Gum, Lightwood Wattle, Back Wattle and Spotted Gum seem to play a significant role in supporting bird populations, while some birds are more adaptable, being seen around multiple types of trees. This can inform urban forestry decisions to enhance bird biodiversity by planting a diverse mix of tree species that attract various birds.

In [1]:
!pip install nbconvert
!apt-get install texlive texlive-xetex texlive-latex-extra pandoc
!sudo apt-get install texlive-xetex texlive-fonts-recommended texlive-plain-generic

from google.colab import drive
drive.mount("/content/drive")

!jupyter nbconvert --to html '/content/drive/MyDrive/MOP/UrbenThing.html'
Requirement already satisfied: nbconvert in /usr/local/lib/python3.10/dist-packages (6.5.4)
Requirement already satisfied: lxml in /usr/local/lib/python3.10/dist-packages (from nbconvert) (4.9.4)
Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.10/dist-packages (from nbconvert) (4.12.3)
Requirement already satisfied: bleach in /usr/local/lib/python3.10/dist-packages (from nbconvert) (6.1.0)
Requirement already satisfied: defusedxml in /usr/local/lib/python3.10/dist-packages (from nbconvert) (0.7.1)
Requirement already satisfied: entrypoints>=0.2.2 in /usr/local/lib/python3.10/dist-packages (from nbconvert) (0.4)
Requirement already satisfied: jinja2>=3.0 in /usr/local/lib/python3.10/dist-packages (from nbconvert) (3.1.4)
Requirement already satisfied: jupyter-core>=4.7 in /usr/local/lib/python3.10/dist-packages (from nbconvert) (5.7.2)
Requirement already satisfied: jupyterlab-pygments in /usr/local/lib/python3.10/dist-packages (from nbconvert) (0.3.0)
Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from nbconvert) (2.1.5)
Requirement already satisfied: mistune<2,>=0.8.1 in /usr/local/lib/python3.10/dist-packages (from nbconvert) (0.8.4)
Requirement already satisfied: nbclient>=0.5.0 in /usr/local/lib/python3.10/dist-packages (from nbconvert) (0.10.0)
Requirement already satisfied: nbformat>=5.1 in /usr/local/lib/python3.10/dist-packages (from nbconvert) (5.10.4)
Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from nbconvert) (24.1)
Requirement already satisfied: pandocfilters>=1.4.1 in /usr/local/lib/python3.10/dist-packages (from nbconvert) (1.5.1)
Requirement already satisfied: pygments>=2.4.1 in /usr/local/lib/python3.10/dist-packages (from nbconvert) (2.16.1)
Requirement already satisfied: tinycss2 in /usr/local/lib/python3.10/dist-packages (from nbconvert) (1.3.0)
Requirement already satisfied: traitlets>=5.0 in /usr/local/lib/python3.10/dist-packages (from nbconvert) (5.7.1)
Requirement already satisfied: platformdirs>=2.5 in /usr/local/lib/python3.10/dist-packages (from jupyter-core>=4.7->nbconvert) (4.3.2)
Requirement already satisfied: jupyter-client>=6.1.12 in /usr/local/lib/python3.10/dist-packages (from nbclient>=0.5.0->nbconvert) (6.1.12)
Requirement already satisfied: fastjsonschema>=2.15 in /usr/local/lib/python3.10/dist-packages (from nbformat>=5.1->nbconvert) (2.20.0)
Requirement already satisfied: jsonschema>=2.6 in /usr/local/lib/python3.10/dist-packages (from nbformat>=5.1->nbconvert) (4.23.0)
Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.10/dist-packages (from beautifulsoup4->nbconvert) (2.6)
Requirement already satisfied: six>=1.9.0 in /usr/local/lib/python3.10/dist-packages (from bleach->nbconvert) (1.16.0)
Requirement already satisfied: webencodings in /usr/local/lib/python3.10/dist-packages (from bleach->nbconvert) (0.5.1)
Requirement already satisfied: attrs>=22.2.0 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat>=5.1->nbconvert) (24.2.0)
Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat>=5.1->nbconvert) (2023.12.1)
Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat>=5.1->nbconvert) (0.35.1)
Requirement already satisfied: rpds-py>=0.7.1 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat>=5.1->nbconvert) (0.20.0)
Requirement already satisfied: pyzmq>=13 in /usr/local/lib/python3.10/dist-packages (from jupyter-client>=6.1.12->nbclient>=0.5.0->nbconvert) (24.0.1)
Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.10/dist-packages (from jupyter-client>=6.1.12->nbclient>=0.5.0->nbconvert) (2.8.2)
Requirement already satisfied: tornado>=4.1 in /usr/local/lib/python3.10/dist-packages (from jupyter-client>=6.1.12->nbclient>=0.5.0->nbconvert) (6.3.3)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  dvisvgm fonts-droid-fallback fonts-lato fonts-lmodern fonts-noto-mono fonts-texgyre
  fonts-urw-base35 libapache-pom-java libcmark-gfm-extensions0.29.0.gfm.3 libcmark-gfm0.29.0.gfm.3
  libcommons-logging-java libcommons-parent-java libfontbox-java libfontenc1 libgs9 libgs9-common
  libidn12 libijs-0.35 libjbig2dec0 libkpathsea6 libpdfbox-java libptexenc1 libruby3.0 libsynctex2
  libteckit0 libtexlua53 libtexluajit2 libwoff1 libzzip-0-13 lmodern pandoc-data poppler-data
  preview-latex-style rake ruby ruby-net-telnet ruby-rubygems ruby-webrick ruby-xmlrpc ruby3.0
  rubygems-integration t1utils teckit tex-common tex-gyre texlive-base texlive-binaries
  texlive-fonts-recommended texlive-latex-base texlive-latex-recommended texlive-pictures
  texlive-plain-generic tipa xfonts-encodings xfonts-utils
Suggested packages:
  fonts-noto fonts-freefont-otf | fonts-freefont-ttf libavalon-framework-java
  libcommons-logging-java-doc libexcalibur-logkit-java liblog4j1.2-java texlive-luatex
  pandoc-citeproc context wkhtmltopdf librsvg2-bin groff ghc nodejs php python libjs-mathjax
  libjs-katex citation-style-language-styles poppler-utils ghostscript fonts-japanese-mincho
  | fonts-ipafont-mincho fonts-japanese-gothic | fonts-ipafont-gothic fonts-arphic-ukai
  fonts-arphic-uming fonts-nanum ri ruby-dev bundler debhelper gv | postscript-viewer perl-tk xpdf
  | pdf-viewer xzdec texlive-fonts-recommended-doc texlive-latex-base-doc python3-pygments
  icc-profiles libfile-which-perl libspreadsheet-parseexcel-perl texlive-latex-extra-doc
  texlive-latex-recommended-doc texlive-pstricks dot2tex prerex texlive-pictures-doc vprerex
  default-jre-headless tipa-doc
The following NEW packages will be installed:
  dvisvgm fonts-droid-fallback fonts-lato fonts-lmodern fonts-noto-mono fonts-texgyre
  fonts-urw-base35 libapache-pom-java libcmark-gfm-extensions0.29.0.gfm.3 libcmark-gfm0.29.0.gfm.3
  libcommons-logging-java libcommons-parent-java libfontbox-java libfontenc1 libgs9 libgs9-common
  libidn12 libijs-0.35 libjbig2dec0 libkpathsea6 libpdfbox-java libptexenc1 libruby3.0 libsynctex2
  libteckit0 libtexlua53 libtexluajit2 libwoff1 libzzip-0-13 lmodern pandoc pandoc-data
  poppler-data preview-latex-style rake ruby ruby-net-telnet ruby-rubygems ruby-webrick ruby-xmlrpc
  ruby3.0 rubygems-integration t1utils teckit tex-common tex-gyre texlive texlive-base
  texlive-binaries texlive-fonts-recommended texlive-latex-base texlive-latex-extra
  texlive-latex-recommended texlive-pictures texlive-plain-generic texlive-xetex tipa
  xfonts-encodings xfonts-utils
0 upgraded, 59 newly installed, 0 to remove and 49 not upgraded.
Need to get 202 MB of archives.
After this operation, 728 MB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu jammy/main amd64 fonts-droid-fallback all 1:6.0.1r16-1.1build1 [1,805 kB]
Get:2 http://archive.ubuntu.com/ubuntu jammy/main amd64 fonts-lato all 2.0-2.1 [2,696 kB]
Get:3 http://archive.ubuntu.com/ubuntu jammy/main amd64 poppler-data all 0.4.11-1 [2,171 kB]
Get:4 http://archive.ubuntu.com/ubuntu jammy/universe amd64 tex-common all 6.17 [33.7 kB]
Get:5 http://archive.ubuntu.com/ubuntu jammy/main amd64 fonts-urw-base35 all 20200910-1 [6,367 kB]
Get:6 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgs9-common all 9.55.0~dfsg1-0ubuntu5.9 [752 kB]
Get:7 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libidn12 amd64 1.38-4ubuntu1 [60.0 kB]
Get:8 http://archive.ubuntu.com/ubuntu jammy/main amd64 libijs-0.35 amd64 0.35-15build2 [16.5 kB]
Get:9 http://archive.ubuntu.com/ubuntu jammy/main amd64 libjbig2dec0 amd64 0.19-3build2 [64.7 kB]
Get:10 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgs9 amd64 9.55.0~dfsg1-0ubuntu5.9 [5,033 kB]
Get:11 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libkpathsea6 amd64 2021.20210626.59705-1ubuntu0.2 [60.4 kB]
Get:12 http://archive.ubuntu.com/ubuntu jammy/main amd64 libwoff1 amd64 1.0.2-1build4 [45.2 kB]
Get:13 http://archive.ubuntu.com/ubuntu jammy/universe amd64 dvisvgm amd64 2.13.1-1 [1,221 kB]
Get:14 http://archive.ubuntu.com/ubuntu jammy/universe amd64 fonts-lmodern all 2.004.5-6.1 [4,532 kB]
Get:15 http://archive.ubuntu.com/ubuntu jammy/main amd64 fonts-noto-mono all 20201225-1build1 [397 kB]
Get:16 http://archive.ubuntu.com/ubuntu jammy/universe amd64 fonts-texgyre all 20180621-3.1 [10.2 MB]
Get:17 http://archive.ubuntu.com/ubuntu jammy/universe amd64 libapache-pom-java all 18-1 [4,720 B]
Get:18 http://archive.ubuntu.com/ubuntu jammy/universe amd64 libcmark-gfm0.29.0.gfm.3 amd64 0.29.0.gfm.3-3 [115 kB]
Get:19 http://archive.ubuntu.com/ubuntu jammy/universe amd64 libcmark-gfm-extensions0.29.0.gfm.3 amd64 0.29.0.gfm.3-3 [25.1 kB]
Get:20 http://archive.ubuntu.com/ubuntu jammy/universe amd64 libcommons-parent-java all 43-1 [10.8 kB]
Get:21 http://archive.ubuntu.com/ubuntu jammy/universe amd64 libcommons-logging-java all 1.2-2 [60.3 kB]
Get:22 http://archive.ubuntu.com/ubuntu jammy/main amd64 libfontenc1 amd64 1:1.1.4-1build3 [14.7 kB]
Get:23 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libptexenc1 amd64 2021.20210626.59705-1ubuntu0.2 [39.1 kB]
Get:24 http://archive.ubuntu.com/ubuntu jammy/main amd64 rubygems-integration all 1.18 [5,336 B]
Get:25 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 ruby3.0 amd64 3.0.2-7ubuntu2.7 [50.1 kB]
Get:26 http://archive.ubuntu.com/ubuntu jammy/main amd64 ruby-rubygems all 3.3.5-2 [228 kB]
Get:27 http://archive.ubuntu.com/ubuntu jammy/main amd64 ruby amd64 1:3.0~exp1 [5,100 B]
Get:28 http://archive.ubuntu.com/ubuntu jammy/main amd64 rake all 13.0.6-2 [61.7 kB]
Get:29 http://archive.ubuntu.com/ubuntu jammy/main amd64 ruby-net-telnet all 0.1.1-2 [12.6 kB]
Get:30 http://archive.ubuntu.com/ubuntu jammy/universe amd64 ruby-webrick all 1.7.0-3 [51.8 kB]
Get:31 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 ruby-xmlrpc all 0.3.2-1ubuntu0.1 [24.9 kB]
Get:32 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libruby3.0 amd64 3.0.2-7ubuntu2.7 [5,113 kB]
Get:33 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libsynctex2 amd64 2021.20210626.59705-1ubuntu0.2 [55.6 kB]
Get:34 http://archive.ubuntu.com/ubuntu jammy/universe amd64 libteckit0 amd64 2.5.11+ds1-1 [421 kB]
Get:35 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libtexlua53 amd64 2021.20210626.59705-1ubuntu0.2 [120 kB]
Get:36 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libtexluajit2 amd64 2021.20210626.59705-1ubuntu0.2 [267 kB]
Get:37 http://archive.ubuntu.com/ubuntu jammy/universe amd64 libzzip-0-13 amd64 0.13.72+dfsg.1-1.1 [27.0 kB]
Get:38 http://archive.ubuntu.com/ubuntu jammy/main amd64 xfonts-encodings all 1:1.0.5-0ubuntu2 [578 kB]
Get:39 http://archive.ubuntu.com/ubuntu jammy/main amd64 xfonts-utils amd64 1:7.7+6build2 [94.6 kB]
Get:40 http://archive.ubuntu.com/ubuntu jammy/universe amd64 lmodern all 2.004.5-6.1 [9,471 kB]
Get:41 http://archive.ubuntu.com/ubuntu jammy/universe amd64 pandoc-data all 2.9.2.1-3ubuntu2 [81.8 kB]
Get:42 http://archive.ubuntu.com/ubuntu jammy/universe amd64 pandoc amd64 2.9.2.1-3ubuntu2 [20.3 MB]
Get:43 http://archive.ubuntu.com/ubuntu jammy/universe amd64 preview-latex-style all 12.2-1ubuntu1 [185 kB]
Get:44 http://archive.ubuntu.com/ubuntu jammy/main amd64 t1utils amd64 1.41-4build2 [61.3 kB]
Get:45 http://archive.ubuntu.com/ubuntu jammy/universe amd64 teckit amd64 2.5.11+ds1-1 [699 kB]
Get:46 http://archive.ubuntu.com/ubuntu jammy/universe amd64 tex-gyre all 20180621-3.1 [6,209 kB]
Get:47 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 texlive-binaries amd64 2021.20210626.59705-1ubuntu0.2 [9,860 kB]
Get:48 http://archive.ubuntu.com/ubuntu jammy/universe amd64 texlive-base all 2021.20220204-1 [21.0 MB]
Get:49 http://archive.ubuntu.com/ubuntu jammy/universe amd64 texlive-fonts-recommended all 2021.20220204-1 [4,972 kB]
Get:50 http://archive.ubuntu.com/ubuntu jammy/universe amd64 texlive-latex-base all 2021.20220204-1 [1,128 kB]
Get:51 http://archive.ubuntu.com/ubuntu jammy/universe amd64 texlive-latex-recommended all 2021.20220204-1 [14.4 MB]
Get:52 http://archive.ubuntu.com/ubuntu jammy/universe amd64 texlive all 2021.20220204-1 [14.3 kB]
Get:53 http://archive.ubuntu.com/ubuntu jammy/universe amd64 libfontbox-java all 1:1.8.16-2 [207 kB]
Get:54 http://archive.ubuntu.com/ubuntu jammy/universe amd64 libpdfbox-java all 1:1.8.16-2 [5,199 kB]
Get:55 http://archive.ubuntu.com/ubuntu jammy/universe amd64 texlive-pictures all 2021.20220204-1 [8,720 kB]
Get:56 http://archive.ubuntu.com/ubuntu jammy/universe amd64 texlive-latex-extra all 2021.20220204-1 [13.9 MB]
Get:57 http://archive.ubuntu.com/ubuntu jammy/universe amd64 texlive-plain-generic all 2021.20220204-1 [27.5 MB]
Get:58 http://archive.ubuntu.com/ubuntu jammy/universe amd64 tipa all 2:1.3-21 [2,967 kB]
Get:59 http://archive.ubuntu.com/ubuntu jammy/universe amd64 texlive-xetex all 2021.20220204-1 [12.4 MB]
Fetched 202 MB in 19s (10.9 MB/s)
Extracting templates from packages: 100%
Preconfiguring packages ...
Selecting previously unselected package fonts-droid-fallback.
(Reading database ... 123599 files and directories currently installed.)
Preparing to unpack .../00-fonts-droid-fallback_1%3a6.0.1r16-1.1build1_all.deb ...
Unpacking fonts-droid-fallback (1:6.0.1r16-1.1build1) ...
Selecting previously unselected package fonts-lato.
Preparing to unpack .../01-fonts-lato_2.0-2.1_all.deb ...
Unpacking fonts-lato (2.0-2.1) ...
Selecting previously unselected package poppler-data.
Preparing to unpack .../02-poppler-data_0.4.11-1_all.deb ...
Unpacking poppler-data (0.4.11-1) ...
Selecting previously unselected package tex-common.
Preparing to unpack .../03-tex-common_6.17_all.deb ...
Unpacking tex-common (6.17) ...
Selecting previously unselected package fonts-urw-base35.
Preparing to unpack .../04-fonts-urw-base35_20200910-1_all.deb ...
Unpacking fonts-urw-base35 (20200910-1) ...
Selecting previously unselected package libgs9-common.
Preparing to unpack .../05-libgs9-common_9.55.0~dfsg1-0ubuntu5.9_all.deb ...
Unpacking libgs9-common (9.55.0~dfsg1-0ubuntu5.9) ...
Selecting previously unselected package libidn12:amd64.
Preparing to unpack .../06-libidn12_1.38-4ubuntu1_amd64.deb ...
Unpacking libidn12:amd64 (1.38-4ubuntu1) ...
Selecting previously unselected package libijs-0.35:amd64.
Preparing to unpack .../07-libijs-0.35_0.35-15build2_amd64.deb ...
Unpacking libijs-0.35:amd64 (0.35-15build2) ...
Selecting previously unselected package libjbig2dec0:amd64.
Preparing to unpack .../08-libjbig2dec0_0.19-3build2_amd64.deb ...
Unpacking libjbig2dec0:amd64 (0.19-3build2) ...
Selecting previously unselected package libgs9:amd64.
Preparing to unpack .../09-libgs9_9.55.0~dfsg1-0ubuntu5.9_amd64.deb ...
Unpacking libgs9:amd64 (9.55.0~dfsg1-0ubuntu5.9) ...
Selecting previously unselected package libkpathsea6:amd64.
Preparing to unpack .../10-libkpathsea6_2021.20210626.59705-1ubuntu0.2_amd64.deb ...
Unpacking libkpathsea6:amd64 (2021.20210626.59705-1ubuntu0.2) ...
Selecting previously unselected package libwoff1:amd64.
Preparing to unpack .../11-libwoff1_1.0.2-1build4_amd64.deb ...
Unpacking libwoff1:amd64 (1.0.2-1build4) ...
Selecting previously unselected package dvisvgm.
Preparing to unpack .../12-dvisvgm_2.13.1-1_amd64.deb ...
Unpacking dvisvgm (2.13.1-1) ...
Selecting previously unselected package fonts-lmodern.
Preparing to unpack .../13-fonts-lmodern_2.004.5-6.1_all.deb ...
Unpacking fonts-lmodern (2.004.5-6.1) ...
Selecting previously unselected package fonts-noto-mono.
Preparing to unpack .../14-fonts-noto-mono_20201225-1build1_all.deb ...
Unpacking fonts-noto-mono (20201225-1build1) ...
Selecting previously unselected package fonts-texgyre.
Preparing to unpack .../15-fonts-texgyre_20180621-3.1_all.deb ...
Unpacking fonts-texgyre (20180621-3.1) ...
Selecting previously unselected package libapache-pom-java.
Preparing to unpack .../16-libapache-pom-java_18-1_all.deb ...
Unpacking libapache-pom-java (18-1) ...
Selecting previously unselected package libcmark-gfm0.29.0.gfm.3:amd64.
Preparing to unpack .../17-libcmark-gfm0.29.0.gfm.3_0.29.0.gfm.3-3_amd64.deb ...
Unpacking libcmark-gfm0.29.0.gfm.3:amd64 (0.29.0.gfm.3-3) ...
Selecting previously unselected package libcmark-gfm-extensions0.29.0.gfm.3:amd64.
Preparing to unpack .../18-libcmark-gfm-extensions0.29.0.gfm.3_0.29.0.gfm.3-3_amd64.deb ...
Unpacking libcmark-gfm-extensions0.29.0.gfm.3:amd64 (0.29.0.gfm.3-3) ...
Selecting previously unselected package libcommons-parent-java.
Preparing to unpack .../19-libcommons-parent-java_43-1_all.deb ...
Unpacking libcommons-parent-java (43-1) ...
Selecting previously unselected package libcommons-logging-java.
Preparing to unpack .../20-libcommons-logging-java_1.2-2_all.deb ...
Unpacking libcommons-logging-java (1.2-2) ...
Selecting previously unselected package libfontenc1:amd64.
Preparing to unpack .../21-libfontenc1_1%3a1.1.4-1build3_amd64.deb ...
Unpacking libfontenc1:amd64 (1:1.1.4-1build3) ...
Selecting previously unselected package libptexenc1:amd64.
Preparing to unpack .../22-libptexenc1_2021.20210626.59705-1ubuntu0.2_amd64.deb ...
Unpacking libptexenc1:amd64 (2021.20210626.59705-1ubuntu0.2) ...
Selecting previously unselected package rubygems-integration.
Preparing to unpack .../23-rubygems-integration_1.18_all.deb ...
Unpacking rubygems-integration (1.18) ...
Selecting previously unselected package ruby3.0.
Preparing to unpack .../24-ruby3.0_3.0.2-7ubuntu2.7_amd64.deb ...
Unpacking ruby3.0 (3.0.2-7ubuntu2.7) ...
Selecting previously unselected package ruby-rubygems.
Preparing to unpack .../25-ruby-rubygems_3.3.5-2_all.deb ...
Unpacking ruby-rubygems (3.3.5-2) ...
Selecting previously unselected package ruby.
Preparing to unpack .../26-ruby_1%3a3.0~exp1_amd64.deb ...
Unpacking ruby (1:3.0~exp1) ...
Selecting previously unselected package rake.
Preparing to unpack .../27-rake_13.0.6-2_all.deb ...
Unpacking rake (13.0.6-2) ...
Selecting previously unselected package ruby-net-telnet.
Preparing to unpack .../28-ruby-net-telnet_0.1.1-2_all.deb ...
Unpacking ruby-net-telnet (0.1.1-2) ...
Selecting previously unselected package ruby-webrick.
Preparing to unpack .../29-ruby-webrick_1.7.0-3_all.deb ...
Unpacking ruby-webrick (1.7.0-3) ...
Selecting previously unselected package ruby-xmlrpc.
Preparing to unpack .../30-ruby-xmlrpc_0.3.2-1ubuntu0.1_all.deb ...
Unpacking ruby-xmlrpc (0.3.2-1ubuntu0.1) ...
Selecting previously unselected package libruby3.0:amd64.
Preparing to unpack .../31-libruby3.0_3.0.2-7ubuntu2.7_amd64.deb ...
Unpacking libruby3.0:amd64 (3.0.2-7ubuntu2.7) ...
Selecting previously unselected package libsynctex2:amd64.
Preparing to unpack .../32-libsynctex2_2021.20210626.59705-1ubuntu0.2_amd64.deb ...
Unpacking libsynctex2:amd64 (2021.20210626.59705-1ubuntu0.2) ...
Selecting previously unselected package libteckit0:amd64.
Preparing to unpack .../33-libteckit0_2.5.11+ds1-1_amd64.deb ...
Unpacking libteckit0:amd64 (2.5.11+ds1-1) ...
Selecting previously unselected package libtexlua53:amd64.
Preparing to unpack .../34-libtexlua53_2021.20210626.59705-1ubuntu0.2_amd64.deb ...
Unpacking libtexlua53:amd64 (2021.20210626.59705-1ubuntu0.2) ...
Selecting previously unselected package libtexluajit2:amd64.
Preparing to unpack .../35-libtexluajit2_2021.20210626.59705-1ubuntu0.2_amd64.deb ...
Unpacking libtexluajit2:amd64 (2021.20210626.59705-1ubuntu0.2) ...
Selecting previously unselected package libzzip-0-13:amd64.
Preparing to unpack .../36-libzzip-0-13_0.13.72+dfsg.1-1.1_amd64.deb ...
Unpacking libzzip-0-13:amd64 (0.13.72+dfsg.1-1.1) ...
Selecting previously unselected package xfonts-encodings.
Preparing to unpack .../37-xfonts-encodings_1%3a1.0.5-0ubuntu2_all.deb ...
Unpacking xfonts-encodings (1:1.0.5-0ubuntu2) ...
Selecting previously unselected package xfonts-utils.
Preparing to unpack .../38-xfonts-utils_1%3a7.7+6build2_amd64.deb ...
Unpacking xfonts-utils (1:7.7+6build2) ...
Selecting previously unselected package lmodern.
Preparing to unpack .../39-lmodern_2.004.5-6.1_all.deb ...
Unpacking lmodern (2.004.5-6.1) ...
Selecting previously unselected package pandoc-data.
Preparing to unpack .../40-pandoc-data_2.9.2.1-3ubuntu2_all.deb ...
Unpacking pandoc-data (2.9.2.1-3ubuntu2) ...
Selecting previously unselected package pandoc.
Preparing to unpack .../41-pandoc_2.9.2.1-3ubuntu2_amd64.deb ...
Unpacking pandoc (2.9.2.1-3ubuntu2) ...
Selecting previously unselected package preview-latex-style.
Preparing to unpack .../42-preview-latex-style_12.2-1ubuntu1_all.deb ...
Unpacking preview-latex-style (12.2-1ubuntu1) ...
Selecting previously unselected package t1utils.
Preparing to unpack .../43-t1utils_1.41-4build2_amd64.deb ...
Unpacking t1utils (1.41-4build2) ...
Selecting previously unselected package teckit.
Preparing to unpack .../44-teckit_2.5.11+ds1-1_amd64.deb ...
Unpacking teckit (2.5.11+ds1-1) ...
Selecting previously unselected package tex-gyre.
Preparing to unpack .../45-tex-gyre_20180621-3.1_all.deb ...
Unpacking tex-gyre (20180621-3.1) ...
Selecting previously unselected package texlive-binaries.
Preparing to unpack .../46-texlive-binaries_2021.20210626.59705-1ubuntu0.2_amd64.deb ...
Unpacking texlive-binaries (2021.20210626.59705-1ubuntu0.2) ...
Selecting previously unselected package texlive-base.
Preparing to unpack .../47-texlive-base_2021.20220204-1_all.deb ...
Unpacking texlive-base (2021.20220204-1) ...
Selecting previously unselected package texlive-fonts-recommended.
Preparing to unpack .../48-texlive-fonts-recommended_2021.20220204-1_all.deb ...
Unpacking texlive-fonts-recommended (2021.20220204-1) ...
Selecting previously unselected package texlive-latex-base.
Preparing to unpack .../49-texlive-latex-base_2021.20220204-1_all.deb ...
Unpacking texlive-latex-base (2021.20220204-1) ...
Selecting previously unselected package texlive-latex-recommended.
Preparing to unpack .../50-texlive-latex-recommended_2021.20220204-1_all.deb ...
Unpacking texlive-latex-recommended (2021.20220204-1) ...
Selecting previously unselected package texlive.
Preparing to unpack .../51-texlive_2021.20220204-1_all.deb ...
Unpacking texlive (2021.20220204-1) ...
Selecting previously unselected package libfontbox-java.
Preparing to unpack .../52-libfontbox-java_1%3a1.8.16-2_all.deb ...
Unpacking libfontbox-java (1:1.8.16-2) ...
Selecting previously unselected package libpdfbox-java.
Preparing to unpack .../53-libpdfbox-java_1%3a1.8.16-2_all.deb ...
Unpacking libpdfbox-java (1:1.8.16-2) ...
Selecting previously unselected package texlive-pictures.
Preparing to unpack .../54-texlive-pictures_2021.20220204-1_all.deb ...
Unpacking texlive-pictures (2021.20220204-1) ...
Selecting previously unselected package texlive-latex-extra.
Preparing to unpack .../55-texlive-latex-extra_2021.20220204-1_all.deb ...
Unpacking texlive-latex-extra (2021.20220204-1) ...
Selecting previously unselected package texlive-plain-generic.
Preparing to unpack .../56-texlive-plain-generic_2021.20220204-1_all.deb ...
Unpacking texlive-plain-generic (2021.20220204-1) ...
Selecting previously unselected package tipa.
Preparing to unpack .../57-tipa_2%3a1.3-21_all.deb ...
Unpacking tipa (2:1.3-21) ...
Selecting previously unselected package texlive-xetex.
Preparing to unpack .../58-texlive-xetex_2021.20220204-1_all.deb ...
Unpacking texlive-xetex (2021.20220204-1) ...
Setting up fonts-lato (2.0-2.1) ...
Setting up fonts-noto-mono (20201225-1build1) ...
Setting up libwoff1:amd64 (1.0.2-1build4) ...
Setting up libtexlua53:amd64 (2021.20210626.59705-1ubuntu0.2) ...
Setting up libijs-0.35:amd64 (0.35-15build2) ...
Setting up libtexluajit2:amd64 (2021.20210626.59705-1ubuntu0.2) ...
Setting up libfontbox-java (1:1.8.16-2) ...
Setting up rubygems-integration (1.18) ...
Setting up libzzip-0-13:amd64 (0.13.72+dfsg.1-1.1) ...
Setting up fonts-urw-base35 (20200910-1) ...
Setting up poppler-data (0.4.11-1) ...
Setting up tex-common (6.17) ...
update-language: texlive-base not installed and configured, doing nothing!
Setting up libfontenc1:amd64 (1:1.1.4-1build3) ...
Setting up libjbig2dec0:amd64 (0.19-3build2) ...
Setting up libteckit0:amd64 (2.5.11+ds1-1) ...
Setting up libapache-pom-java (18-1) ...
Setting up ruby-net-telnet (0.1.1-2) ...
Setting up xfonts-encodings (1:1.0.5-0ubuntu2) ...
Setting up t1utils (1.41-4build2) ...
Setting up libidn12:amd64 (1.38-4ubuntu1) ...
Setting up fonts-texgyre (20180621-3.1) ...
Setting up libkpathsea6:amd64 (2021.20210626.59705-1ubuntu0.2) ...
Setting up ruby-webrick (1.7.0-3) ...
Setting up libcmark-gfm0.29.0.gfm.3:amd64 (0.29.0.gfm.3-3) ...
Setting up fonts-lmodern (2.004.5-6.1) ...
Setting up libcmark-gfm-extensions0.29.0.gfm.3:amd64 (0.29.0.gfm.3-3) ...
Setting up fonts-droid-fallback (1:6.0.1r16-1.1build1) ...
Setting up pandoc-data (2.9.2.1-3ubuntu2) ...
Setting up ruby-xmlrpc (0.3.2-1ubuntu0.1) ...
Setting up libsynctex2:amd64 (2021.20210626.59705-1ubuntu0.2) ...
Setting up libgs9-common (9.55.0~dfsg1-0ubuntu5.9) ...
Setting up teckit (2.5.11+ds1-1) ...
Setting up libpdfbox-java (1:1.8.16-2) ...
Setting up libgs9:amd64 (9.55.0~dfsg1-0ubuntu5.9) ...
Setting up preview-latex-style (12.2-1ubuntu1) ...
Setting up libcommons-parent-java (43-1) ...
Setting up dvisvgm (2.13.1-1) ...
Setting up libcommons-logging-java (1.2-2) ...
Setting up xfonts-utils (1:7.7+6build2) ...
Setting up libptexenc1:amd64 (2021.20210626.59705-1ubuntu0.2) ...
Setting up pandoc (2.9.2.1-3ubuntu2) ...
Setting up texlive-binaries (2021.20210626.59705-1ubuntu0.2) ...
update-alternatives: using /usr/bin/xdvi-xaw to provide /usr/bin/xdvi.bin (xdvi.bin) in auto mode
update-alternatives: using /usr/bin/bibtex.original to provide /usr/bin/bibtex (bibtex) in auto mode
Setting up lmodern (2.004.5-6.1) ...
Setting up texlive-base (2021.20220204-1) ...
/usr/bin/ucfr
/usr/bin/ucfr
/usr/bin/ucfr
/usr/bin/ucfr
mktexlsr: Updating /var/lib/texmf/ls-R-TEXLIVEDIST... 
mktexlsr: Updating /var/lib/texmf/ls-R-TEXMFMAIN... 
mktexlsr: Updating /var/lib/texmf/ls-R... 
mktexlsr: Done.
tl-paper: setting paper size for dvips to a4: /var/lib/texmf/dvips/config/config-paper.ps
tl-paper: setting paper size for dvipdfmx to a4: /var/lib/texmf/dvipdfmx/dvipdfmx-paper.cfg
tl-paper: setting paper size for xdvi to a4: /var/lib/texmf/xdvi/XDvi-paper
tl-paper: setting paper size for pdftex to a4: /var/lib/texmf/tex/generic/tex-ini-files/pdftexconfig.tex
Setting up tex-gyre (20180621-3.1) ...
Setting up texlive-plain-generic (2021.20220204-1) ...
Setting up texlive-latex-base (2021.20220204-1) ...
Setting up texlive-latex-recommended (2021.20220204-1) ...
Setting up texlive-pictures (2021.20220204-1) ...
Setting up texlive-fonts-recommended (2021.20220204-1) ...
Setting up tipa (2:1.3-21) ...
Setting up texlive (2021.20220204-1) ...
Setting up texlive-latex-extra (2021.20220204-1) ...
Setting up texlive-xetex (2021.20220204-1) ...
Setting up rake (13.0.6-2) ...
Setting up libruby3.0:amd64 (3.0.2-7ubuntu2.7) ...
Setting up ruby3.0 (3.0.2-7ubuntu2.7) ...
Setting up ruby (1:3.0~exp1) ...
Setting up ruby-rubygems (3.3.5-2) ...
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for fontconfig (2.13.1-4.2ubuntu5) ...
Processing triggers for libc-bin (2.35-0ubuntu3.4) ...
/sbin/ldconfig.real: /usr/local/lib/libtbbbind.so.3 is not a symbolic link

/sbin/ldconfig.real: /usr/local/lib/libur_loader.so.0 is not a symbolic link

/sbin/ldconfig.real: /usr/local/lib/libtbbmalloc.so.2 is not a symbolic link

/sbin/ldconfig.real: /usr/local/lib/libtbbbind_2_5.so.3 is not a symbolic link

/sbin/ldconfig.real: /usr/local/lib/libur_adapter_level_zero.so.0 is not a symbolic link

/sbin/ldconfig.real: /usr/local/lib/libtbbbind_2_0.so.3 is not a symbolic link

/sbin/ldconfig.real: /usr/local/lib/libtbb.so.12 is not a symbolic link

/sbin/ldconfig.real: /usr/local/lib/libur_adapter_opencl.so.0 is not a symbolic link

/sbin/ldconfig.real: /usr/local/lib/libtbbmalloc_proxy.so.2 is not a symbolic link

Processing triggers for tex-common (6.17) ...
Running updmap-sys. This may take some time... done.
Running mktexlsr /var/lib/texmf ... done.
Building format(s) --all.
	This may take some time... done.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
texlive-fonts-recommended is already the newest version (2021.20220204-1).
texlive-fonts-recommended set to manually installed.
texlive-plain-generic is already the newest version (2021.20220204-1).
texlive-plain-generic set to manually installed.
texlive-xetex is already the newest version (2021.20220204-1).
0 upgraded, 0 newly installed, 0 to remove and 49 not upgraded.
Mounted at /content/drive
[NbConvertApp] WARNING | pattern '/content/drive/MyDrive/MOP/UrbenThing.html' matched no files
This application is used to convert notebook files (*.ipynb)
        to various other formats.

        WARNING: THE COMMANDLINE INTERFACE MAY CHANGE IN FUTURE RELEASES.

Options
=======
The options below are convenience aliases to configurable class-options,
as listed in the "Equivalent to" description-line of the aliases.
To see all configurable class-options for some <cmd>, use:
    <cmd> --help-all

--debug
    set log level to logging.DEBUG (maximize logging output)
    Equivalent to: [--Application.log_level=10]
--show-config
    Show the application's configuration (human-readable format)
    Equivalent to: [--Application.show_config=True]
--show-config-json
    Show the application's configuration (json format)
    Equivalent to: [--Application.show_config_json=True]
--generate-config
    generate default config file
    Equivalent to: [--JupyterApp.generate_config=True]
-y
    Answer yes to any questions instead of prompting.
    Equivalent to: [--JupyterApp.answer_yes=True]
--execute
    Execute the notebook prior to export.
    Equivalent to: [--ExecutePreprocessor.enabled=True]
--allow-errors
    Continue notebook execution even if one of the cells throws an error and include the error message in the cell output (the default behaviour is to abort conversion). This flag is only relevant if '--execute' was specified, too.
    Equivalent to: [--ExecutePreprocessor.allow_errors=True]
--stdin
    read a single notebook file from stdin. Write the resulting notebook with default basename 'notebook.*'
    Equivalent to: [--NbConvertApp.from_stdin=True]
--stdout
    Write notebook output to stdout instead of files.
    Equivalent to: [--NbConvertApp.writer_class=StdoutWriter]
--inplace
    Run nbconvert in place, overwriting the existing notebook (only
            relevant when converting to notebook format)
    Equivalent to: [--NbConvertApp.use_output_suffix=False --NbConvertApp.export_format=notebook --FilesWriter.build_directory=]
--clear-output
    Clear output of current file and save in place,
            overwriting the existing notebook.
    Equivalent to: [--NbConvertApp.use_output_suffix=False --NbConvertApp.export_format=notebook --FilesWriter.build_directory= --ClearOutputPreprocessor.enabled=True]
--no-prompt
    Exclude input and output prompts from converted document.
    Equivalent to: [--TemplateExporter.exclude_input_prompt=True --TemplateExporter.exclude_output_prompt=True]
--no-input
    Exclude input cells and output prompts from converted document.
            This mode is ideal for generating code-free reports.
    Equivalent to: [--TemplateExporter.exclude_output_prompt=True --TemplateExporter.exclude_input=True --TemplateExporter.exclude_input_prompt=True]
--allow-chromium-download
    Whether to allow downloading chromium if no suitable version is found on the system.
    Equivalent to: [--WebPDFExporter.allow_chromium_download=True]
--disable-chromium-sandbox
    Disable chromium security sandbox when converting to PDF..
    Equivalent to: [--WebPDFExporter.disable_sandbox=True]
--show-input
    Shows code input. This flag is only useful for dejavu users.
    Equivalent to: [--TemplateExporter.exclude_input=False]
--embed-images
    Embed the images as base64 dataurls in the output. This flag is only useful for the HTML/WebPDF/Slides exports.
    Equivalent to: [--HTMLExporter.embed_images=True]
--sanitize-html
    Whether the HTML in Markdown cells and cell outputs should be sanitized..
    Equivalent to: [--HTMLExporter.sanitize_html=True]
--log-level=<Enum>
    Set the log level by value or name.
    Choices: any of [0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL']
    Default: 30
    Equivalent to: [--Application.log_level]
--config=<Unicode>
    Full path of a config file.
    Default: ''
    Equivalent to: [--JupyterApp.config_file]
--to=<Unicode>
    The export format to be used, either one of the built-in formats
            ['asciidoc', 'custom', 'html', 'latex', 'markdown', 'notebook', 'pdf', 'python', 'rst', 'script', 'slides', 'webpdf']
            or a dotted object name that represents the import path for an
            ``Exporter`` class
    Default: ''
    Equivalent to: [--NbConvertApp.export_format]
--template=<Unicode>
    Name of the template to use
    Default: ''
    Equivalent to: [--TemplateExporter.template_name]
--template-file=<Unicode>
    Name of the template file to use
    Default: None
    Equivalent to: [--TemplateExporter.template_file]
--theme=<Unicode>
    Template specific theme(e.g. the name of a JupyterLab CSS theme distributed
    as prebuilt extension for the lab template)
    Default: 'light'
    Equivalent to: [--HTMLExporter.theme]
--sanitize_html=<Bool>
    Whether the HTML in Markdown cells and cell outputs should be sanitized.This
    should be set to True by nbviewer or similar tools.
    Default: False
    Equivalent to: [--HTMLExporter.sanitize_html]
--writer=<DottedObjectName>
    Writer class used to write the
                                        results of the conversion
    Default: 'FilesWriter'
    Equivalent to: [--NbConvertApp.writer_class]
--post=<DottedOrNone>
    PostProcessor class used to write the
                                        results of the conversion
    Default: ''
    Equivalent to: [--NbConvertApp.postprocessor_class]
--output=<Unicode>
    overwrite base name use for output files.
                can only be used when converting one notebook at a time.
    Default: ''
    Equivalent to: [--NbConvertApp.output_base]
--output-dir=<Unicode>
    Directory to write output(s) to. Defaults
                                  to output to the directory of each notebook. To recover
                                  previous default behaviour (outputting to the current
                                  working directory) use . as the flag value.
    Default: ''
    Equivalent to: [--FilesWriter.build_directory]
--reveal-prefix=<Unicode>
    The URL prefix for reveal.js (version 3.x).
            This defaults to the reveal CDN, but can be any url pointing to a copy
            of reveal.js.
            For speaker notes to work, this must be a relative path to a local
            copy of reveal.js: e.g., "reveal.js".
            If a relative path is given, it must be a subdirectory of the
            current directory (from which the server is run).
            See the usage documentation
            (https://nbconvert.readthedocs.io/en/latest/usage.html#reveal-js-html-slideshow)
            for more details.
    Default: ''
    Equivalent to: [--SlidesExporter.reveal_url_prefix]
--nbformat=<Enum>
    The nbformat version to write.
            Use this to downgrade notebooks.
    Choices: any of [1, 2, 3, 4]
    Default: 4
    Equivalent to: [--NotebookExporter.nbformat_version]

Examples
--------

    The simplest way to use nbconvert is

            > jupyter nbconvert mynotebook.ipynb --to html

            Options include ['asciidoc', 'custom', 'html', 'latex', 'markdown', 'notebook', 'pdf', 'python', 'rst', 'script', 'slides', 'webpdf'].

            > jupyter nbconvert --to latex mynotebook.ipynb

            Both HTML and LaTeX support multiple output templates. LaTeX includes
            'base', 'article' and 'report'.  HTML includes 'basic', 'lab' and
            'classic'. You can specify the flavor of the format used.

            > jupyter nbconvert --to html --template lab mynotebook.ipynb

            You can also pipe the output to stdout, rather than a file

            > jupyter nbconvert mynotebook.ipynb --stdout

            PDF is generated via latex

            > jupyter nbconvert mynotebook.ipynb --to pdf

            You can get (and serve) a Reveal.js-powered slideshow

            > jupyter nbconvert myslides.ipynb --to slides --post serve

            Multiple notebooks can be given at the command line in a couple of
            different ways:

            > jupyter nbconvert notebook*.ipynb
            > jupyter nbconvert notebook1.ipynb notebook2.ipynb

            or you can specify the notebooks list in a config file, containing::

                c.NbConvertApp.notebooks = ["my_notebook.ipynb"]

            > jupyter nbconvert --config mycfg.py

To see all available configurables, use `--help-all`.

In [ ]: